home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / mxinfo / opl3_doc / opl3.doc next >
Text File  |  1994-11-24  |  38KB  |  1,015 lines

  1.  
  2.     Programmer's Guide to Yamaha YMF 262/OPL3 FM Music Synthesizer
  3.     ──────────────────────────────────────────────────────────────
  4.  
  5.  
  6.               Version 1.00  Nov-24-1994
  7.  
  8.            Written by Vladimir Arnost, QA-Software
  9.             Internet:  xarnos00@dcse.fee.vutbr.cz
  10.  
  11.  
  12.     This manual can be distributed freely if not modified.
  13.  
  14.  
  15. DISCLAIMER:     I assume no responsibility for any damages arising out of
  16. ----------    use or inability to use this text. No warranty is provided
  17.         about correctness of any information in this file. You are
  18.         on your own.
  19.  
  20.  
  21. INTRODUCTION
  22. ------------
  23.  
  24. The chip I am going to describe is getting more and more common, but
  25. programming information is still scarce, so I have decided to fill in this
  26. gap. All information contained in this file is a result of my experience in
  27. Adlib programming, research (read: reverse engineering) and finally of my
  28. effort to write down everything necessary to understand and use this piece
  29. of hardware. No official sources (i.e. development kits, books about this
  30. topic, etc.) were available to me except:
  31.  
  32.     Adlib Programming Guide - by Tero Töttö, and
  33.     The PC Games Programmers Encyclopedia V1.0
  34.  
  35. The information below is a combination of known features of Adlib (alias
  36. Yamaha YM 3812/OPL2) and my own uncountable experiments and failures, which
  37. brought out a lot of important details you have to know about the chip.
  38.  
  39. As far as I know, there are four major sound cards based on OPL3 chip:
  40.  
  41.    * Sound Blaster Pro II (not Sound Blaster Pro I)
  42.    * Sound Blaster 16
  43.    * Adlib Gold
  44.    * Pro Audio Spectrum Plus/16
  45.  
  46. I currently have a Sound Blaster Pro II-compatible card only, so all the
  47. programming info I provide will be based on this card. (The other cards
  48. are quite similar, however. They are just wired at different I/O-port
  49. addresses.)
  50.  
  51. Note: I assume some knowledge of FM music programming (mainly Adlib FM
  52.       synthesizer) in this manual. If you are new to this topic I recommend
  53.       you try Adlib first before going higher. Anyway, OPL3 is a direct
  54.       descendant of OPL2 (what a surprise), so most features of OPL2 are
  55.       also present on OPL3.
  56.  
  57.  
  58. DESCRIPTION OF THE SYNTHESIZER
  59. ------------------------------
  60.  
  61. My card's user manual says: "[this card contains] ... a stereo music
  62. FM synthesizer with 20 channels consisting of four (4) operators each ... "
  63. I thought: "Wow -- that's together eighty operators. This must be a GOOD
  64. sound-card." I was wrong. Just another advertising lie.
  65.  
  66. So let's clear some facts. First, OPL3 has only thirty-six (36) operators
  67. which can be combined in several ways:
  68.  
  69.    * 18 FM channels (36 operators), or
  70.    * 15 FM channels (30 ops) and 5 percussion instruments (6 ops), giving
  71.      us 20 channels altogether, or
  72.    * up to 6 four-operator FM channels (max 24 ops), the rest again being
  73.      divided into two-operator FM channels and drums.
  74.  
  75. From the table above you can see that not all channels can be used in four-
  76. operator (4-OP) mode -- only a part of the synthesizer is really capable of
  77. making 4-OP sounds -- the rest uses traditional two-operator (2-OP) mode.
  78.  
  79. Second, the manual states this card is capable of "stereo" music. Yes, the
  80. quotes are necessary, because the stereo capabilities are very limited.
  81. You are given ability to control output going to left or right channel by
  82. turning it on and off. That's all. So the sound can flow from very left side,
  83. center and very right side. No sound panning, no special stereo effects. :-(
  84.  
  85. Well, flaming apart, back to the main topic.
  86.  
  87.  
  88. The OPL3 chip is capable of making sounds in several ways:
  89.  
  90. 1. Two-operator Additive Synthesis
  91.  
  92.    Output of both operators is simply added. It is the simplest way to
  93.    make any sound, and it works on both OPL2 and OPL3. The diagram
  94.    should make it clear.
  95.  
  96.     ┌────────────┐
  97.     │            │
  98.     │ Operator 1 ├────────┐
  99.     │            │        │
  100.     └────────────┘        │
  101.                   ├────────> Output
  102.     ┌────────────┐        │
  103.     │            │        │
  104.     │ Operator 2 ├────────┘
  105.     │            │
  106.     └────────────┘
  107.  
  108.  
  109. 2. Two-operator Frequency Modulation (FM) Synthesis
  110.  
  111.    Output from the first operator (Modulator) is sent to the input of the
  112.    second one (Carrier) and is used to modulate (alter) frequency of the
  113.    second operator. Only the second operator produces sound. Most of
  114.    interesting sounds are made this way. This also works on OPL2.
  115.    Hope the picture helps.
  116.  
  117.     ┌────────────┐         ┌────────────┐
  118.     │            │         │            │
  119.     │ Operator 1 ├────────>│ Operator 2 ├────────> Output
  120.     │(Modulator) │         │ (Carrier)  │
  121.     └────────────┘         └────────────┘
  122.  
  123.  
  124. 3. Four-operator "Mess" Modulation Synthesis
  125.  
  126.    All of OPL3's 4-OP configurations are combinations of the above two modes
  127.    of synthesis. OPL3 combines these two modes in four ways. I have no words
  128.    to describe these four ways. Only the pictures can show their principle.
  129.  
  130.    a) FM-FM Mode
  131.  
  132.     ┌───────┐      ┌───────┐      ┌───────┐      ┌───────┐
  133.     │       │      │       │      │       │      │       │
  134.     │ Op. 1 ├─────>│ Op. 2 ├─────>│ Op. 3 ├─────>│ Op. 4 ├─────> Output
  135.     │       │      │       │      │       │      │       │
  136.     └───────┘      └───────┘      └───────┘      └───────┘
  137.  
  138.    b) AM-FM Mode
  139.  
  140.     ┌───────┐
  141.     │       │
  142.     │ Op. 1 ├───────────────────────────────────┐
  143.     │       │                                   │
  144.     └───────┘                                   │
  145.                             │
  146.     ┌───────┐      ┌───────┐      ┌───────┐     │
  147.     │       │      │       │      │       │     │
  148.     │ Op. 2 ├─────>│ Op. 3 ├─────>│ Op. 4 ├─────┴─────> Output
  149.     │       │      │       │      │       │
  150.     └───────┘      └───────┘      └───────┘
  151.  
  152.    c) FM-AM Mode
  153.  
  154.     ┌───────┐      ┌───────┐
  155.     │       │      │       │
  156.     │ Op. 1 ├─────>│ Op. 2 ├─────┐
  157.     │       │      │       │     │
  158.     └───────┘      └───────┘     │
  159.                      ├─────> Output
  160.     ┌───────┐      ┌───────┐     │
  161.     │       │      │       │     │
  162.     │ Op. 3 ├─────>│ Op. 4 ├─────┘
  163.     │       │      │       │
  164.     └───────┘      └───────┘
  165.  
  166.    d) AM-AM Mode
  167.  
  168.     ┌───────┐
  169.     │       │
  170.     │ Op. 1 ├────────────────────┐
  171.     │       │                    │
  172.     └───────┘                    │
  173.                      │
  174.     ┌───────┐      ┌───────┐     │
  175.     │       │      │       │     │
  176.     │ Op. 2 ├─────>│ Op. 3 ├─────┼─────> Output
  177.     │       │      │       │     │
  178.     └───────┘      └───────┘     │
  179.                      │
  180.     ┌───────┐                    │
  181.     │       │                    │
  182.     │ Op. 4 ├────────────────────┘
  183.     │       │
  184.     └───────┘
  185.  
  186.    Nice, aren't they?
  187.  
  188.    The only way I think this can be written is a math formula.
  189.    Symbol + (plus) means additive synthesis, and * (asterisk) means
  190.    frequency modulation (Op1 * Op2 means operator 1 modulates operator 2,
  191.    not vice versa). Here they are:
  192.  
  193.    a) FM-FM Mode:     (Op1 * Op2 * Op3 * Op4) ────> Output
  194.    b) AM-FM Mode:      Op1 + (Op2 * Op3 * Op4) ───> Output
  195.    c) FM-AM Mode:     (Op1 * Op2) + (Op3 * Op4) ──> Output
  196.    d) AM-AM Mode:      Op1 + (Op2 * Op3) + Op4 ───> Output
  197.  
  198.  
  199. 4. Percussion Mode
  200.  
  201.    In this mode 6 operators are used to produce five different percussion
  202.    instruments:
  203.  
  204.    * Bass Drum (2 operators)
  205.    * Snare Drum (1 operator)
  206.    * Tom-Tom (1 operator)
  207.    * Cymbal (1 operator)
  208.    * Hi-Hat (1 operator)
  209.  
  210.    Because these instruments occupy only three melodic channels, only
  211.    Bass Drum, Snare Drum and Tom-Tom frequencies can be set. Cymbal and
  212.    Hi-Hat frequencies are fixed.
  213.  
  214.    This mode is identical with that of OPL2. For more details see ADLIB.DOC.
  215.  
  216.  
  217. PROGRAMMING THE SYNTHESIZER
  218. ---------------------------
  219.  
  220. OPL3 may be found at the following addresses:
  221.  
  222.    Sound Blaster Pro II        220h or 240h (selectable), also 388h
  223.    Adlib Gold            388h
  224.    Pro Audio Spectrum Plus/16    ? (if you have a PAS you should know it)
  225.  
  226. The base address of the synthesizer will be called "base".
  227.  
  228. The chip occupies four I/O addresses:
  229.  
  230.    base+0    Primary index register (write), Status register (read)
  231.    base+1    Primary data register (write-only)
  232.    base+2    Secondary index register (write)
  233.    base+3    Secondary data register (write-only)
  234.  
  235. The index registers are used to select internal registers and data registers
  236. are used to write to them. Status register returns the state of two timers
  237. built in the chip.
  238. OPL3 contains two sets of registers. The Primary set maps to channels 0-8
  239. (operators 0-17) and the secondary maps to channels 9-17 (operators 18-35).
  240. The reason for this is simple: all these registers wouldn't fit into single
  241. register set.
  242.  
  243. Unlike Adlib (OPL2), OPL3 doesn't need delay between register writes.
  244. With OPL2 you had to wait 3.3 µs after index register write and another
  245. 23 µs after data register write. On the contrary OPL3 doesn't need
  246. (almost) any delay after index register write and only 0.28 µs after data
  247. register write. This means you can neglect the delays and slightly speed up
  248. your music driver. But using reasonable delays will certainly do no harm.
  249.  
  250. The data registers can't be read (they are write-only) on both OPL2 and OPL3.
  251.  
  252.  
  253. REGISTER MAP
  254. ------------
  255.  
  256. The registers are grouped in the same manner as in the OPL2 chip. Programs
  257. using both OPL2 and OPL3 chips may use the same code provided that their
  258. direct I/O interface is well written. The only thing you have to change is
  259. operator-to-register mapping, which must accomodate the fact that registers
  260. are spread between two register sets.
  261.  
  262. (The register map is nearly the same so I dared to copy it from ADLIB.DOC.)
  263.  
  264. Status Register (base+0):
  265. ┌───────────────────────────────────────────────────────────────────────┐
  266. │   D7       D6       D5       D4       D3       D2       D1       D0   │
  267. ├────────┼────────┼────────┼────────┴────────┴────────┴────────┴────────┤
  268. │IRQFlag │ T1Flag │ T2Flag │                                            │
  269. └────────┴────────┴────────┴────────────────────────────────────────────┘
  270.  
  271.  
  272. Data Registers (base+1, base+3):
  273. ┌─────┬───────────────────────────────────────────────────────────────────────┐
  274. │ REG │   D7       D6       D5       D4       D3       D2       D1       D0   │
  275. ├─────┼────────┴────────┼────────┼────────┴────────┴────────┴────────┴────────┤
  276. │ 01  │                 │WSEnable│               Test Register                │
  277. ├─────┼─────────────────┴────────┴────────────────────────────────────────────┤
  278. │ 02  │                  Timer 1 Count (80 µsec resolution)                   │
  279. ├─────┼───────────────────────────────────────────────────────────────────────┤
  280. │ 03  │                  Timer 2 Count (320 µsec resolution)                  │
  281. ├─────┼────────┬────────┬────────┬──────────────────────────┬────────┬────────┤
  282. │ 04* │IRQReset│ T1Mask │ T2Mask │                          │T2 Start│T1 Start│
  283. ├─────┼────────┴────────┼────────┼────────┬────────┬────────┼────────┼────────┤
  284. │ 04**│                 │4-OP B-E│4-OP A-D│4-OP 9-C│4-OP 2-5│4-OP 1-4│4-OP 0-3│
  285. ├─────┼─────────────────┴────────┴────────┴────────┴────────┴────────┼────────┤
  286. │ 05**│                                                              │  OPL3  │
  287. ├─────┼────────┬────────┬────────────────────────────────────────────┴────────┤
  288. │ 08  │  CSW   │NOTE-SEL│                                                     │
  289. ├─────┼────────┼────────┼────────┬────────┬───────────────────────────────────┤
  290. │20-35│Tremolo │Vibrato │Sustain │  KSR   │  Frequency Multiplication Factor  │
  291. ├─────┼────────┴────────┼────────┴────────┴───────────────────────────────────┤
  292. │40-55│ Key Scale Level │                    Output Level                     │
  293. ├─────┼─────────────────┴─────────────────┬───────────────────────────────────┤
  294. │60-75│            Attack Rate            │            Decay Rate             │
  295. ├─────┼───────────────────────────────────┼───────────────────────────────────┤
  296. │80-95│           Sustain Level           │           Release Rate            │
  297. ├─────┼───────────────────────────────────┴───────────────────────────────────┤
  298. │A0-A8│                  Frequency Number  ( Lower 8 bits )                   │
  299. ├─────┼─────────────────┬────────┬──────────────────────────┬─────────────────┤
  300. │B0-B8│                 │ KEY-ON │       Block Number       │ F-Num (hi bits) │
  301. ├─────┼────────┬────────┼────────┼────────┬────────┬────────┼────────┬────────┤
  302. │ BD  │Trem Dep│Vibr Dep│PercMode│ BD On  │ SD On  │ TT On  │ CY On  │ HH On  │
  303. ├─────┼────────┴────────┼────────┼────────┼────────┴────────┴────────┼────────┤
  304. │C0-C8│                 │ Right  │ Left   │FeedBack Modulation Factor│SynthTyp│
  305. ├─────┼─────────────────┴────────┴────────┴────────┬─────────────────┴────────┤
  306. │E0-F5│                                            │      Waveform Select     │
  307. └─────┴────────────────────────────────────────────┴──────────────────────────┘
  308.  
  309. Notes:
  310.    *  This applies only to port base+1
  311.    ** This applies only to port base+3
  312.  
  313.  
  314. For register bases A0, B0 and C0 there is one register per output channel.
  315. The primary register set holds the first nine channels (0-8) and the secondary
  316. holds last nine channels (9-17).
  317. For bases 20, 40, 60, 80 and E0 there are two registers per channel. Each
  318. register maps to one operator. Unfortunately the operator's register numbers
  319. are not continuous. The following table shows which operator maps to which
  320. register set and offset (in hex).
  321.  
  322. ┌────────────────────┬────────────────────┐
  323. │  Op.  Set/Offset   │  Op.  Set/Offset   │
  324. ├────────────────────┼────────────────────┤
  325. │  0      0/00       │  18     1/00       │
  326. │  1      0/01       │  19     1/01       │
  327. │  2      0/02       │  20     1/02       │
  328. │  3      0/03       │  21     1/03       │
  329. │  4      0/04       │  22     1/04       │
  330. │  5      0/05       │  23     1/05       │
  331. │  6      0/08       │  24     1/08       │
  332. │  7      0/09       │  25     1/09       │
  333. │  8      0/0A       │  26     1/0A       │
  334. │  9      0/0B       │  27     1/0B       │
  335. │  10     0/0C       │  28     1/0C       │
  336. │  11     0/0D       │  29     1/0D       │
  337. │  12     0/10       │  30     1/10       │
  338. │  13     0/11       │  31     1/11       │
  339. │  14     0/12       │  32     1/12       │
  340. │  15     0/13       │  33     1/13       │
  341. │  16     0/14       │  34     1/14       │
  342. │  17     0/15       │  35     1/15       │
  343. └────────────────────┴────────────────────┘
  344.  
  345. The following tables summarize which operators form a channel in various
  346. modes:
  347.  
  348. 1. Two-operator Melodic Mode
  349.  
  350. ┌────────────┬──────────────────────────────────────────────────────────────┐
  351. │ Channel    │ 0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17 │
  352. ├────────────┼──────────────────────────────────────────────────────────────┤
  353. │ Operator 1 │ 0  1  2  6  7  8  12 13 14 18 19  20  24  25  26  30  31  32 │
  354. │ Operator 2 │ 3  4  5  9  10 11 15 16 17 21 22  23  27  28  29  33  34  35 │
  355. └────────────┴──────────────────────────────────────────────────────────────┘
  356.  
  357. 2. Two-operator Melodic and Percussion Mode
  358.  
  359. ┌────────────┬──────────────────────────────────────────────────────────────┐
  360. │ Channel    │ 0  1  2  3  4  5  BD SD TT CY HH  9  10 11 12 13 14 15 16 17 │
  361. ├────────────┼──────────────────────────────────────────────────────────────┤
  362. │ Operator 1 │ 0  1  2  6  7  8  12 16 14 17 13  18 19 20 24 25 26 30 31 32 │
  363. │ Operator 2 │ 3  4  5  9  10 11 15              21 22 23 27 28 29 33 34 35 │
  364. └────────────┴──────────────────────────────────────────────────────────────┘
  365.  
  366. 3. Four-operator Melodic Mode
  367.  
  368. ┌────────────┬───────────────────────────────────────────────────┐
  369. │ Channel    │ 0   1   2    6   7   8    9   10  11   15  16  17 │
  370. ├────────────┼───────────────────────────────────────────────────┤
  371. │ Operator 1 │ 0   1   2    12  13  14   18  19  20   30  31  32 │
  372. │ Operator 2 │ 3   4   5    15  16  17   21  22  23   33  34  35 │
  373. │ Operator 3 │ 6   7   8                 24  25  26              │
  374. │ Operator 4 │ 9   10  11                27  28  29              │
  375. └────────────┴───────────────────────────────────────────────────┘
  376.  
  377.    Channels 3, 4, 5 and 12, 13, 14 can't be used separately because their
  378.    operators became part of channels 0, 1, 2 and 9, 10, 11 respectively.
  379.    For instance a four-operator channel 1 consists of two two-operator
  380.    channels number 1 and 4. (The second 2-OP channel number is always the
  381.    first 2-OP channel number plus three.)
  382.  
  383.    OPL3 allows you to enable/disable 4-OP mode separately for any of
  384.    channels 0, 1, 2, 9, 10 and 11 (see register 104h in the reference below).
  385.    This means for instance when you switch only channel 2 into 4-OP mode,
  386.    channels number 0, 1, 3, 4, 6, 7, 8, 9, etc. will be still independent
  387.    2-OP channels.
  388.  
  389.    Channels 6, 7, 8 and 15, 16, 17 are always two-operator ones. They can't
  390.    be grouped to form four-operator channels.
  391.  
  392. 4. Four-operator Melodic and Percussion Mode
  393.  
  394. ┌────────────┬────────────────────────────────────────────────────────┐
  395. │ Channel    │ 0   1   2    BD SD TT CY HH    9   10  11   15  16  17 │
  396. ├────────────┼────────────────────────────────────────────────────────┤
  397. │ Operator 1 │ 0   1   2    12 16 14 17 13    18  19  20   30  31  32 │
  398. │ Operator 2 │ 3   4   5    15                21  22  23   33  34  35 │
  399. │ Operator 3 │ 6   7   8                      24  25  26              │
  400. │ Operator 4 │ 9   10  11                     27  28  29              │
  401. └────────────┴────────────────────────────────────────────────────────┘
  402.  
  403.  
  404. Examples:
  405.    * Two-operator channel #14 consists of operators 26 and 29 which occupy
  406.      these registers (all are in the secondary register set):
  407.     12A - Operator 1 - Tremolo/Vibrato/Sustain/KSR/Multiplication
  408.     12D - Operator 2 - Tremolo/Vibrato/Sustain/KSR/Multiplication
  409.     14A - Operator 1 - Key Scale Level/Output Level
  410.     14D - Operator 2 - Key Scale Level/Output Level
  411.     16A - Operator 1 - Attack Rate/Decay Rate
  412.     16D - Operator 2 - Attack Rate/Decay Rate
  413.     18A - Operator 1 - Sustain Level/Release Rate
  414.     18D - Operator 2 - Sustain Level/Release Rate
  415.     1A5 -              Frequency Number (low)
  416.     1B5 -              Key On/Block Number/Frequency Number (high)
  417.     1C5 -              FeedBack/Synthesis Type
  418.     1EA - Operator 1 - Waveform Select
  419.     1ED - Operator 2 - Waveform Select
  420.  
  421.     * Four-operator channel #1 consists of operators 1, 4, 7 and 10. All
  422.       registers except register 104h are in the primary set:
  423.     104 - bit 1 = 1  - Enable Four-Operator Synthesis in channel #1
  424.      21 - Operator 1 - Tremolo/Vibrato/Sustain/KSR/Multiplication
  425.      24 - Operator 2 - Tremolo/Vibrato/Sustain/KSR/Multiplication
  426.      29 - Operator 3 - Tremolo/Vibrato/Sustain/KSR/Multiplication
  427.      2C - Operator 4 - Tremolo/Vibrato/Sustain/KSR/Multiplication
  428.      41 - Operator 1 - Key Scale Level/Output Level
  429.      44 - Operator 2 - Key Scale Level/Output Level
  430.      49 - Operator 3 - Key Scale Level/Output Level
  431.      4C - Operator 4 - Key Scale Level/Output Level
  432.      61 - Operator 1 - Attack Rate/Decay Rate
  433.      64 - Operator 2 - Attack Rate/Decay Rate
  434.      69 - Operator 3 - Attack Rate/Decay Rate
  435.      6C - Operator 4 - Attack Rate/Decay Rate
  436.      81 - Operator 1 - Sustain Level/Release Rate
  437.      84 - Operator 2 - Sustain Level/Release Rate
  438.      89 - Operator 3 - Sustain Level/Release Rate
  439.      8C - Operator 4 - Sustain Level/Release Rate
  440.      A1 -              Frequency Number (low)
  441.      A4 -              Unused
  442.      B1 -              Key On/Block Number/Frequency Number (high)
  443.      B4 -              Unused
  444.      C1 -              FeedBack/Synthesis Type (part 1)
  445.      C4 -              Synthesis Type (part 2)
  446.      E1 - Operator 1 - Waveform Select
  447.      E4 - Operator 2 - Waveform Select
  448.      E9 - Operator 3 - Waveform Select
  449.      EC - Operator 4 - Waveform Select
  450.  
  451.     NOTE: If a register number is greater than 100h, then it belongs into the
  452.           secondary register set. (I use this numbering to emphasize the fact
  453.           that the particular register MUST be written to the secondary set.)
  454.           See Appendix A.
  455.  
  456.  
  457.  
  458. OPL3 REGISTER REFERENCE
  459. -----------------------
  460.  
  461. Because the registers of OPL3 are almost the same as of OPL2, I have copied
  462. their descriptions from file ADLIB.DOC.
  463.  
  464. * Status Register:
  465.  
  466.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  467.    ║IRQ│T1 │T2 │     Not used      ║
  468.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  469.  
  470.    bit 7: IRQ Flag. Set whenever any timer has elapsed.
  471.    bit 6: Timer 1 Flag. Set every time the preset time in Timer 1 has elapsed.
  472.    bit 5: Timer 2 Flag. Set every time the preset time in Timer 2 has elapsed.
  473.  
  474.    Timer interrupts are not wired to any IRQ (why??). The timers can be used
  475.    to detect the OPL2/OPL3 chip (see Appendix B).
  476.  
  477.  
  478. * Data Registers:
  479.  
  480. 01: Test Register / Waveform Select Enable:
  481.  
  482.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  483.    ║       │WSE│   Test Register   ║
  484.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  485.  
  486.    bit 5:    Waveform Select Enable. If clear, all channels will use normal
  487.          sine wave. If set, register E0-F5 (Waveform Select) contents
  488.          will be used.
  489.    bits 0-4: Test Register. Must be reset to zero before any operation.
  490.  
  491.  
  492. 02: Timer 1 Count:
  493.  
  494.    Upward 8 bit counter with a resolution of 80 µsec. If an overflow occurs,
  495.    the status register bit is set, and the preset value is loaded into the
  496.    timer again.
  497.  
  498.  
  499. 03: Timer 2 Count:
  500.  
  501.    Same as Timer 1, but with a resolution of 320 µsec.
  502.  
  503.  
  504. 004 (port: base+1): IRQ-Reset / Mask / Start:
  505.  
  506.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  507.    ║Rst│T1M│T2M│           │T2S│T1S║
  508.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  509.  
  510.    bit 7:    IRQ-Reset. Resets timer and IRQ flags in status register.
  511.          All other bits are ignored when this bit is set.
  512.    bit 6:    Timer 1 Mask. If 1, status register is not affected in overflow.
  513.    bit 5:    Timer 2 Mask. Same as above.
  514.    bit 1:    Timer 2 Start. Timer on/off.
  515.    bit 0:    Timer 1 Start. Same as above.
  516.  
  517.  
  518. 104 (port: base+3): Four-Operator Enable:
  519.  
  520.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  521.    ║       │ChB│ChA│Ch9│Ch2│Ch1│Ch0║
  522.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  523.  
  524.    bit 5:    Enable four-operator synthesis for channel pair 11 - 14 (decimal).
  525.    bit 4:    Same as above for channel pair 10 - 13.
  526.    bit 3:    Same as above for channel pair 9 - 12.
  527.    bit 2:    Same as above for channel pair 2 - 5.
  528.    bit 1:    Same as above for channel pair 1 - 4.
  529.    bit 0:    Same as above for channel pair 0 - 3.
  530.  
  531.    If reset to zero, OPL3 can produce 18 two-operator sounds at a time.
  532.    If nonzero, OPL3 produces four-operator sound in appropriate channel pair.
  533.  
  534.  
  535. 105 (port: base+3): OPL3 Mode Enable:
  536.  
  537.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  538.    ║                           │OPL║
  539.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  540.  
  541.    bit 0:    OPL3 Mode Enable. When set, OPL3 extensions (36 operators, 4-OP
  542.              synthesis, 8 waveforms, stereo output) can be used. When reset,
  543.              the chip behaves as an ordinary OPL2. This bit is zero by default
  544.              for compatibility with OPL2.
  545.  
  546.  
  547. 08: CSW / NOTE-SEL:
  548.  
  549.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  550.    ║CSW│N-S│                       ║
  551.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  552.  
  553.    bit 7:    Composite sine wave mode on/off. All KEY-ON bits must be clear
  554.          in order to use this mode. The card is unable to create any other
  555.          sound when in CSW mode. (Unfortunately, I have no info how to
  556.          use this mode :-< ).
  557.    bit 6:    NOTE-SEL. Controls the split point of the keyboard. When 0, the
  558.          keyboard split is the second bit from the bit 8 of the F-Number.
  559.          When 1, the MSb of the F-Number is used. (???)
  560.  
  561.  
  562. 20-35: Tremolo / Vibrato / Sustain / KSR / Frequency Multiplication Factor:
  563.  
  564.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  565.    ║Tre│Vib│Sus│KSR│ Multiplication║
  566.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  567.  
  568.    bit 7:    Tremolo (Amplitude vibrato) on/off.
  569.    bit 6:    Frequency vibrato on/off.
  570.    bit 5:    Sound Sustaining. When 1, operator's output level will be held at
  571.              its sustain level until a KEY-OFF is done.
  572.    bit 4:    Envelope scaling (KSR) on/off. When 1, higher notes are shorter
  573.              than lower notes.
  574.    bits 0-3: Frequency Multiplication Factor (MULTI). Operator's frequency
  575.          is set to (see registers A0, B0) F-Number * Factor.
  576.  
  577.         ┌───────┬────────┐
  578.         │ MULTI │ Factor │
  579.         ├───────┼────────┤
  580.         │   0   │    ½   │
  581.         │   1   │    1   │
  582.         │   2   │    2   │
  583.         │   3   │    3   │
  584.         │   4   │    4   │
  585.         │   5   │    5   │
  586.         │   6   │    6   │
  587.         │   7   │    7   │
  588.         │   8   │    8   │
  589.         │   9   │    9   │
  590.         │  10   │   10   │
  591.         │  11   │   10   │
  592.         │  12   │   12   │
  593.         │  13   │   12   │
  594.         │  14   │   15   │
  595.         │  15   │   15   │
  596.         └───────┴────────┘
  597.  
  598.  
  599. 40-55: Key Scale Level / Output Level:
  600.  
  601.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  602.    ║  KSL  │      Output Level     ║
  603.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  604.  
  605.    bits 6-7: Key Scale Level. Attenuates output level towards higher pitch:
  606.  
  607.         ┌─────┬─────────────┐
  608.         │ KSL │ Attenuation │
  609.         ├─────┼─────────────┤
  610.         │  0  │ -           │
  611.         │  1  │ 1.5 dB/oct  │
  612.         │  2  │ 3.0 dB/oct  │
  613.         │  3  │ 6.0 dB/oct  │
  614.         └─────┴─────────────┘
  615.  
  616.    bits 0-5: Output Level. Attenuates the operator output level. 0 is the
  617.          loudest, 3F is the softest. In additive synthesis, varying
  618.          the output level of any operator varies the volume of its
  619.          corresponding channel. In FM synthesis, varying the output level
  620.          of the carrier varies the volume of the channel. Varying the
  621.          output of the modulator will change the frequency spectrum
  622.          produced by the carrier.
  623.          The following table summarizes which operators' output levels
  624.          should be updated when trying to change channel output level.
  625.  
  626.         ┌───────┬──────┬──────┬──────┬──────┐
  627.         │ Mode  │ Op 1 │ Op 2 │ Op 3 │ Op 4 │
  628.         ├───────┼──────┼──────┼──────┼──────┤
  629.         │  AM   │  √   │  √   │ N/A  │ N/A  │
  630.         │  FM   │  -   │  √   │ N/A  │ N/A  │
  631.         │ FM-FM │  -   │  -   │  -   │  √   │
  632.         │ AM-FM │  √   │  -   │  -   │  √   │
  633.         │ FM-AM │  -   │  √   │  -   │  √   │
  634.         │ AM-AM │  √   │  -   │  √   │  √   │
  635.         └───────┴──────┴──────┴──────┴──────┘
  636.  
  637.  
  638. 60-75: Attack Rate / Decay Rate:
  639.  
  640.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  641.    ║  Attack Rate  │  Decay Rate   ║
  642.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  643.  
  644.    bits 4-7: Attack Rate. Determines the rising time for the sound.
  645.          The higher the value, the faster the attack.
  646.    bits 0-3: Decay Rate. Determines the diminishing time for the sound.
  647.          The higher the value, the shorter the decay.
  648.  
  649.  
  650. 80-95: Sustain Level / Release Rate:
  651.  
  652.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  653.    ║ Sustain Level │  Release Rate ║
  654.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  655.  
  656.    bits 4-7: Sustain Level. Determines the point at which the sound ceases
  657.          to decay and chages to a sound having a constant level. The
  658.          sustain level is expressed as a fraction of the maximum level.
  659.          0 is the softest and F is the loudest sustain level.
  660.          Note that the Sustain-bit in the register 20-35 must be set for
  661.          this to have an effect.
  662.    bits 0-3: Release Rate. Determines the rate at which the sound disappears
  663.          after KEY-OFF. The higher the value, the shorter the release.
  664.  
  665.  
  666. A0-A8: Frequency Number:
  667.  
  668.    Determines the pitch of the note. Highest bits of F-Number are stored
  669.    in the register below.
  670.  
  671.  
  672. B0-B8: Key On / Block Number / F-Number(hi bits):
  673.  
  674.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  675.    ║       │KEY│ Block Num.│ Freq  ║
  676.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  677.  
  678.    bit 5:    KEY-ON. When 1, channel output is enabled.
  679.    bits 2-4: Block Number. Roughly determines the octave.
  680.    bits 0-1: Frequency Number. 2 highest bits of the above register.
  681.  
  682.          The following formula is used to determine F-Number and Block:
  683.  
  684.         F-Number = Music Frequency * 2^(20-Block) / 49716 Hz
  685.  
  686.    NOTE: In four-operator mode only the register value of Operators 1 and 2
  687.          is used, value of Operators 3 and 4 in this register is ignored.
  688.          In other words: one channel uses only one frequency, block and KEY-ON
  689.          value at a time, regardless whether it is a two- or four-operator
  690.          channel.
  691.  
  692.  
  693. BD: Tremolo Depth / Vibrato Depth / Percussion Mode / BD/SD/TT/CY/HH On:
  694.  
  695.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  696.    ║Tre│Vib│Per│BD │SD │TT │CY │HH ║
  697.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  698.  
  699.    bit 7:    Tremolo (Amplitude Vibrato) Depth. 0 = 1.0dB, 1 = 4.8dB.
  700.    bit 6:    Frequency Vibrato Depth. 0 = 7 cents, 1 = 14 cents.
  701.          A "cent" is 1/100 of a semi-tone.
  702.    bit 5:    Percussion Mode. 0 = Melodic Mode, 1 = Percussion Mode.
  703.    bit 4:    BD On. KEY-ON of the Bass Drum channel.
  704.    bit 3:    SD On. KEY-ON of the Snare Drum channel.
  705.    bit 2:    TT On. KEY-ON of the Tom-Tom channel.
  706.    bit 1:    CY On. KEY-ON of the Cymbal channel.
  707.    bit 0:    HH On. KEY-ON of the Hi-Hat channel.
  708.  
  709.    NOTE: KEY-ON bits of channels 6, 7 and 8 must be clear and their
  710.      F-Nums, Attack/Decay/Release rates, etc. must be set properly
  711.      to use percussion mode.
  712.  
  713.  
  714. C0-C8: FeedBack Modulation Factor / Synthesis Type:
  715.  
  716.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  717.    ║       │ R │ L │ FeedBack  │Syn║
  718.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  719.  
  720.    bit 5:    Right Speaker Enable. When set, channel output goes to right
  721.              speaker.
  722.    bit 4:    Left Speaker Enable. When set, channel output goes to left
  723.              speaker. At least one of these bits must be set to hear
  724.              the channel.
  725.          These two bits can be used to realize sound "panning", but this
  726.          method offers only three pan positions (left/center/right).
  727.          These bits apply only to operators producing sound (Carriers).
  728.          Modulators are not affected by their setting.
  729.    bits 1-3: FeedBack Modulation Factor. If 0, no feedback is present. If 1-7,
  730.          operator 1 will send a portion of its output back into itself.
  731.  
  732.         ┌──────────┬────────┐
  733.         │ FeedBack │ Factor │
  734.         ├──────────┼────────┤
  735.         │    0     │   0    │
  736.         │    1     │  π/16  │
  737.         │    2     │  π/8   │
  738.         │    3     │  π/4   │
  739.         │    4     │  π/2   │
  740.         │    5     │   π    │
  741.         │    6     │  2∙π   │
  742.         │    7     │  4∙π   │
  743.         └──────────┴────────┘
  744.  
  745.          When in four-operator mode, the FeedBack value is used only by
  746.          Operator 1, value of Operators 2, 3 and 4 is ignored.
  747.    bit 0:    Synthesis Type. 1 = Additive synthesis, 0 = Frequency Modulation
  748.          In four-operator mode, there are two bits controlling the
  749.          synthesis type. Both are the bit 0 of register C0, one of
  750.          Operators 1 and 2 and the second of Operators 3 and 4.
  751.  
  752.         ┌────────┬────────┬────────┐
  753.         │ Op 1&2 │ Op 3&4 │  Type  │
  754.         ├────────┼────────┼────────┤
  755.         │    0   │  NONE  │   FM   │
  756.         │    1   │  NONE  │   AM   │
  757.         │    0   │    0   │ FM-FM  │
  758.         │    1   │    0   │ AM-FM  │
  759.         │    0   │    1   │ FM-AM  │
  760.         │    1   │    1   │ AM-AM  │
  761.         └────────┴────────┴────────┘
  762.  
  763.  
  764. E0-F5: Waveform Select:
  765.  
  766.    ╓─7─┬─6─┬─5─┬─4─┬─3─┬─2─┬─1─┬─0─╖
  767.    ║                   │ WaveForm  ║
  768.    ╙───┴───┴───┴───┴───┴───┴───┴───╜
  769.  
  770.    bits 0-2: WaveForm Select (WS):
  771.  
  772.     WaveForm 0: Sine        WaveForm 1: Half-Sine
  773.      │ /~\                        │ /~\         /~\
  774.      │/   \       /                  │/   \       /   \
  775.     ─/─────\─────/──                ─┼─────┴-----┴─────┴─
  776.      │      \   /                    │
  777.      │       \_/                     │
  778.  
  779.     WaveForm 2: Abs-Sine        WaveForm 3: Pulse-Sine
  780.      │ /~\     /~\                │ /~|         /~|
  781.      │/   \ /   \ /                  │/  |        /  |
  782.     ─┼─────┴─────┴──                ─┼───┴-------┴───┴───
  783.      │                               │
  784.      │                               │
  785.  
  786.     WaveForm 4: Sine - even periods only
  787.      │ /~\                      /~\
  788.      │/   \                   /   \
  789.     ─┼─────\─────┬-----------┴─────\─────┬─
  790.      │      \   /                   \   /
  791.      │       \_/                     \_/
  792.  
  793.     WaveForm 5: Abs-Sine - even periods only
  794.      │ /~\     /~\              /~\   /~\
  795.      │/   \ /   \             /   \ /   \
  796.     ─┼─────┴─────┴-----------┴─────┴─────┴─
  797.      │
  798.      │
  799.  
  800.     WaveForm 6: Square
  801.      │-----┐     ┌-----┐     ┌-----┐     ┌-
  802.      │     |     |     |     |     |     |
  803.     ─┼─────|─────|─────|─────|─────|─────|──
  804.      │     |     |     |     |     |     |
  805.      │     └-----┘     └-----┘     └-----┘
  806.  
  807.     WaveForm 7: Derived Square
  808.      │          |\                |\
  809.      │         |  \              |  \
  810.     ─┼--__────|────~~-----__────|────~~-----
  811.      │    \  |              \  |
  812.      │     \|                \|
  813.  
  814.    NOTE: Bit 5 of register 01 must be set to use waveforms other than sine.
  815.      Waveforms 4-7 are available only on OPL3.
  816.      See files WAVEn.GIF for real waveforms, where n is a number between
  817.      0 and 7.
  818.  
  819.  
  820.  
  821. APPENDIX A - EXAMPLES
  822. ---------------------
  823.  
  824. These examples show a few working routines used in my MUS Player.
  825. They are written in Borland C++ 3.1 but should be easy to translate to any
  826. other language.
  827. --------------------------------- cut here ---------------------------------
  828. // I prefer using these Assembler-like types
  829. typedef unsigned int  WORD;
  830. typedef unsigned char BYTE;
  831.  
  832. /*
  833.  * FM Synthesizer base port. SB Pro II - 0x220, Adlib 0x388
  834.  */
  835. WORD FMport = 0x220;
  836.  
  837. /*
  838.  * Enables OPL3 extensions.
  839.  */
  840. WORD OPL3 = 1;
  841.  
  842. /*
  843.  * Direct write to any Adlib/SB Pro II FM synthetiser register.
  844.  *   reg - register number (range 0x001-0x0F5 and 0x101-0x1F5). When high byte
  845.  *         of reg is zero, data go to port FMport, otherwise to FMport+2
  846.  *   data - register value to be written
  847.  */
  848. BYTE FMwriteReg(WORD reg, BYTE data)
  849. {
  850.     asm {
  851.     mov    dx,FMport
  852.     mov    ax,reg
  853.     or    ah,ah        // high byte is nonzero -- write to port base+2
  854.     jz    out1
  855.     inc    dx
  856.     inc    dx
  857.     }
  858. out1: asm {
  859.     out    dx,al
  860.     mov    cx,6
  861.     }
  862. loop1:asm {            // delay between writes
  863.     in    al,dx
  864.     loop    loop1
  865.  
  866.     inc    dx
  867.     mov    al,data
  868.     out    dx,al
  869.     dec    dx
  870.     mov    cx,36
  871.     }
  872. loop2:asm {            // delay after data write
  873.     in    al,dx
  874.     loop    loop2
  875.     }
  876.     return _AL;
  877. }
  878.  
  879. /*
  880.  * Write to an operator pair. To be used for register bases of 0x20, 0x40,
  881.  * 0x60, 0x80 and 0xE0.
  882.  */
  883. void FMwriteChannel(BYTE regbase, BYTE channel, BYTE data1, BYTE data2)
  884. {
  885.     static BYTE adlib_op[] = {0, 1, 2, 8, 9, 10, 16, 17, 18};
  886.     static BYTE sbpro_op[] = { 0,  1,  2,   6,  7,  8,  12, 13, 14,
  887.                   18, 19, 20,  24, 25, 26,  30, 31, 32};
  888.     static WORD rg[] = {0x000,0x001,0x002,0x003,0x004,0x005,
  889.             0x008,0x009,0x00A,0x00B,0x00C,0x00D,
  890.             0x010,0x011,0x012,0x013,0x014,0x015,
  891.             0x100,0x101,0x102,0x103,0x104,0x105,
  892.             0x108,0x109,0x10A,0x10B,0x10C,0x10D,
  893.             0x110,0x111,0x112,0x113,0x114,0x115};
  894.  
  895.     if (OPL3)
  896.     {
  897.     register WORD reg = sbpro_op[channel];
  898.     FMwriteReg(rg[reg]+regbase, data1);
  899.     FMwriteReg(rg[reg+3]+regbase, data2);
  900.     } else {
  901.     register WORD reg = regbase+adlib_op[channel];
  902.     FMwriteReg(reg, data1);
  903.     FMwriteReg(reg+3, data2);
  904.     }
  905. }
  906.  
  907. /*
  908.  * Write to channel a single value. To be used for register bases of
  909.  * 0xA0, 0xB0 and 0xC0.
  910.  */
  911. void FMwriteValue(BYTE regbase, BYTE channel, BYTE value)
  912. {
  913.     static WORD ch[] = {0x000,0x001,0x002,0x003,0x004,0x005,0x006,0x007,0x008,
  914.             0x100,0x101,0x102,0x103,0x104,0x105,0x106,0x107,0x108};
  915.     register WORD chan;
  916.  
  917.     if (OPL3)
  918.     chan = ch[channel];
  919.     else
  920.     chan = channel;
  921.     FMwriteReg(regbase + chan, value);
  922. }
  923. --------------------------------- cut here ---------------------------------
  924.  
  925.  
  926. APPENDIX B - DETECTION METHODS
  927. ------------------------------
  928.  
  929. An official method of Adlib (OPL2) detection is:
  930.  
  931. 1. Reset Timer 1 and Timer 2: write 60h to register 4.
  932. 2. Reset the IRQ: write 80h to register 4.
  933.    NOTE: Steps 1 and 2 can't be combined together.
  934. 3. Read status register: read port base+0 (388h). Save the result.
  935. 4. Set Timer 1 to FFh: write FFh to register 2.
  936. 5. Unmask and start Timer 1: write 21h to register 4.
  937. 6. Wait in a delay loop for at least 80 µsec.
  938. 7. Read status register: read port base+0 (388h). Save the result.
  939. 8. Reset Timer 1, Timer 2 and IRQ as in steps 1 and 2.
  940. 9. Test the results of the two reads: the first should be 0,
  941.    the second should be C0h.
  942.    If either is incorrect, then the OPL2 is not present.
  943.  
  944. NOTE1: You should AND the result bytes with E0h because the unused bits
  945.        are undefined.
  946. NOTE2: This testing method doesn't work in some SoundBlaster compatible cards.
  947.  
  948. OPL3 DETECTION
  949. --------------
  950.  
  951. 0. Detect OPL2. If present, continue.
  952. 1. Read status register: read port base+0.
  953. 2. AND the result with 06h.
  954. 3. If the result is zero, you have OPL3, otherwise OPL2.
  955.  
  956. NOTE: This is NOT an official method. I have dug it out of a sound driver.
  957.       I haven't tested it, because I haven't an OPL2 card (Adlib, SB Pro I).
  958.       Nevertheless it "detects" my SB Pro II properly. ;-)
  959.  
  960. Another possible detection method for distinguishing between SB Pro I and
  961. SB Pro II would be to try to detect OPL2 at I/O port base+0 and then at port
  962. base+2. The first test should succeed and the second should fail if OPL3 is
  963. present. (Remember: SB Pro I contains twin OPL2 chips at addresses base+0 and
  964. base+2, while SB Pro II contains one OPL3 chip at I/O address base+0 thru
  965. base+3).
  966.  
  967. BLASTER ENVIRONMENT VARIABLE
  968. ----------------------------
  969.  
  970. Perhaps the most recommended "detection" method. Reading this variable avoids
  971. blindfold I/O port scanning and possible device conflicts. The user is
  972. responsible for its proper setting.
  973.  
  974. The variable has this format:
  975.  
  976.     BLASTER=Aaddr Iirq Ddma Ttype
  977.  
  978. A: Base I/O address given in hex. For most Sound Blasters the default is 220.
  979. I: IRQ Number (decimal). Default 7.
  980. D: DMA Number (decimal). Default 1.
  981. T: Card Type (decimal):
  982.     1 - Sound Blaster 1.5
  983.     2 - Sound Blaster Pro I
  984.     3 - Sound Blaster 2.0
  985.     4 - Sound Blaster Pro II
  986.  
  987. Example:
  988.     BLASTER=A220 I7 D1 T4
  989.  
  990.  
  991.  
  992. REFERENCES
  993. ----------
  994.  
  995. Title:        The PC Games Programmers Encyclopedia
  996. Authors:    Mark Feldman and many others on Usenet and Internet
  997. FTP:        teeri.oulu.fi
  998.         /pub/msdos/programming/gpe
  999.  ... you can find (almost) everything you need there
  1000.  
  1001.  
  1002. Title:        Sound Blaster - The Official Book
  1003. Authors:    Richard Heimlich, David M. Golden, Ivan Luk, Peter M. Ridge
  1004. Publishers:    Osborne/McGraw Hill
  1005. ISBN:        0-07-881907-5
  1006.  ... this is a number-one in my book-wishlist. If anyone wanted to get rid of
  1007.      the book, I wouldn't scorn it ... :-)
  1008.  
  1009.  
  1010. Title:        The SoundBlaster Developer Kit
  1011. Publishers:    Creative Labs Inc
  1012.         Creative Technology PTE LTD
  1013.  ... I wonder if you can find something comprehensible in that.
  1014.  
  1015.